#ifndef __SPI_SOFT_H__
#define __SPI_SOFT_H__

#include "gd32f4xx.h"
#include "systick.h"


/*************** pin config *****************/
// scl 
#define SPI_SOFT_CLK_RCU	RCU_GPIOF
#define SPI_SOFT_CLK_PORT	GPIOF
#define SPI_SOFT_CLK_PIN	GPIO_PIN_7

// MOSI 
#define SPI_SOFT_MOSI_RCU	RCU_GPIOF
#define SPI_SOFT_MOSI_PORT	GPIOF
#define SPI_SOFT_MOSI_PIN	GPIO_PIN_9

// MISO 
#define SPI_SOFT_MISO_RCU	RCU_GPIOF
#define SPI_SOFT_MISO_PORT	GPIOF
#define SPI_SOFT_MISO_PIN	GPIO_PIN_8

// CS 片选哪部分用到 哪部分在实现 

/************** spi config *******************/
// 时钟极性 0:空闲为低电平 1:空闲为高电平
// 在时钟上升沿读数据，在时钟下降沿写数据
#define SPI0_CPOL		0
#define SPIO_CPHA		0

/*************** gpio opt ********************/

#define SPI_SOFT_CLK(bit)		 gpio_bit_write(SPI_SOFT_CLK_PORT, SPI_SOFT_CLK_PIN, bit?SET:RESET)
#define SPI_SOFT_MOSI(bit)		 gpio_bit_write(SPI_SOFT_MOSI_PORT, SPI_SOFT_MOSI_PIN,bit?SET:RESET)
#define SPI_SOFT_MISO_STATE()    gpio_input_bit_get(SPI_SOFT_MISO_PORT, SPI_SOFT_MISO_PIN)

/*************** cs config ********************/
// cs片选相关配置 需要再调用的文件中实现


void SPI_SOFT_INIT();
void SPI_SOFT_WRITE_BYTE(uint8_t data);
uint8_t SPI_SOFT_READ_BYTE();
uint8_t SPI_SOFT_READ_WRITE_BYTE(uint8_t data);
#endif